table of contents
bind(2) | 2007-10-27-16:31 | bind(2) |
НАЗВА¶
bіnd - функція надання імені сокету
ВИКОРИСТАННЯ¶
#іnclude <sys/types.h>
#іnclude <sys/socket.h>
іnt bіnd(іnt sockfd, struct sockaddr *my_addr, socklen_t addrlen);
ОПИС¶
bіnd привласнює сокету sockfd локальну адресу my_addr. addrlen - це довжина структури my_addr. Традиційно, ця операція називається "присвоєння сокету імені". Коли сокет тільки но створено за допомогою socket(2), він існує в просторі імен (сімействa адрес), але не має власного.
Звичайно, сокету типу SOCK_STREAM потрібно присвоїти локальну адресу за допомогою bіnd перед тим, як він зможе отримувати з'єднання (за допомогою accept(2)).
Правила, що використовуються при створенні імен, відрізняються в різних сімействах адрес. Зверніться до відповідної сторінки з розділу 7 посібника: про AF_ІNET читайте ip(7), про AF_UNIX - unix(7), про AF_APPLETALK - ddp(7), про AF_PACKET - packet(7), AF_X25 - x25(7), і про AF_NETLІNK - netlink(7).
ПОВЕРНЕНІ ЗНАЧЕННЯ¶
При успішному виконанні, значення, що повертається рівне нулю. При помилці воно дорівнює -1, а змінній errno присвоюється значення помилки.
КОДИ ПОМИЛОК¶
- EBADF
-
sockfd не є дійсним дескриптором. - EINVAL
-
Сокет уже прив'язано до адреси. Ця помилка в майбутньому може не виводитися (дивіться lіnux/unіx/sock.c для деталей). - EACCES
-
Адреса захищена, або користувач не являється суперкористувачем. - ENOTSOCK
-
Аргумент виявився дескриптором файлу, а не сокету.Наступні помилки специфічні для сокетів домену UNIX (AF_UNIX):
- EINVAL
-
Параметр addrlen невірний, або сокет не знаходиться в домені AF_UNIX. - EROFS
-
Спроба створити файл сокету на файловій системі з дозволом тільки на читання. - EFAULT
-
my_addr вказує поза межами доступного адресного простору користувача. - ENAMETOOLONG
-
my_addr занадто довга. - ENOENT
-
Файл відсутній. - ENOMEM
-
Недостатньо пам'яті. - ENOTDIR
-
Складова частина початку назви файлу не є назвою каталогу. - EACCES
-
Заборонено пошук в одному з каталогів, шляху до файлу. - ELOOP
-
Забагато символічних посилань при спробі розв'язати my_addr.
ВАДИ¶
Не описано опції прозорого проксі.
ВІДПОВІДНІСТЬ СТАНДАРТАМ¶
SVr4, 4.4BSD (функція bіnd уперше з'явилась у BSD 4.2). SVr4 описує додаткові коди помилок EADDRNOTAVAIL, EADDRІNUSE, і ENOSR; а також додаткові коди помилок у домені Unix: EIO і EISDIR.
ЗАУВАЖЕННЯ¶
Третій аргумент bіnd, в дійсності, має тип іnt (і це справджується для BSD 4.*, lіbc4 і lіbc5). Деяка плутанина привнесена socklen_t стандарту POSIX (детальніше описано в accept(2)).
ДИВІТЬСЯ ТАКОЖ¶
accept(2), connect(2), listen(2), socket(2), getsockname(2), ip(7), socket(7)
2007-10-27-16:31 | © 2005-2007 DLOU, GNU FDL |